雑に読む "The Illustrated Stable Diffusion"
by Jay Alammar
Stable Diffusionを大まかに分類する
https://gyazo.com/b48b971515f347e04ec1832e9fa53fa8
文章理解部
77のトークン埋め込みベクトル(768次元)
画像生成部
どっちやねんnomadoor.icon
オートエンコーダーは入力とほぼ同じものを出力する
潜在空間にあった配列を画像に変換する
Diffusion(拡散)ってなあに?
上の画像のピンク部で行われる(Image Information Creator)
ノイズと埋め込みトークンを受け取って、デコーダーに渡す配列を作る
https://gyazo.com/57523c5295877e0dca59a032c0bc9991
複数回のステップで行われる
入力テキスト(プロンプト)と、モデルからピックアップした視覚情報に近いlatents arrayを作る
?
Diffusionの仕組み
ノイズ予測器を作る
https://gyazo.com/f977c21ad34c092fa9c5b230142a58efhttps://gyazo.com/837c34f872e745d97a67eb44a39bc80e
ある画像にノイズを追加する
ノイズの種類とノイズをかける強さを変えて数十個のパターンを作る
これを全画像で行う
このデータセットでノイズ予測器をトレーニングする
ノイズから画像を生成する
適当なノイズを用意
それと似たノイズを上でつくったデータセットから探す
そこからノイズを除去すれば画像が出てくるよね?
だから西洋美術的な画像だけでデータセットを作れば、出力も西洋美術っぽくなるし、漫画でデータセットを作れば出力も漫画っぽくなる
あれ?、ここまでだと他人の絵をコピペしてるだけやんっていうAIアンチの主張に反論できないぞ?nomadoor.icon
"元データにある画像"ではなくて、"似たような画像"なのでコピペではない
まだプロンプトも出てきてませんね
高速化
ピクセル画像ではなく潜在的なデータ上での拡散(Latent Diffusion)
Stable Diffusionでは高速化のために画像を圧縮したもので拡散処理をする
https://gyazo.com/f5f8ddae8e6173f0c81a7cb67e438cd5
潜在空間上の流れは上と同じ
逆にノイズから生成された画像をオートエンコーダ(図のImage Decoder)で潜在空間から取り出す
条件付け
"プロンプトを理解させて、それに沿った絵を描かせたい"
画像生成コンポーネント(?)よりも言語モデルを入れ替えた方が性能があがる
これはまた別でやろうnomadoor.icon
画像生成プロセスにプロンプトの情報を入れる
https://gyazo.com/2006ed75fb9a7fd0cd4b9c8172df40fe
ノイズ予測器を作る段階で、テキスト情報も含ませる必要がある
U-Net内でどんなふうに動いているのか見てみよう
ノイズ予測器(U-Net) テキスト情報なし
https://gyazo.com/157671bfc9f37a5b886385a30936f767
https://gyazo.com/3b34a24d676ef6fe53d858b5533f76c4
ノイズ予測器(U-Net) テキスト情報あり
https://gyazo.com/4079824d158ddee209d03409d19cc032
https://gyazo.com/7fdaa42c4a5355c1fcd59e379081f081
乾燥卵(かんそうらん)
U-Netわからんnomadoor.icon
ノイズから画像を生成する方のU-Netが特にわからん